网络仿真器NS2/NS3,接受的数据集包含坐标信息(即位置信息)。但有些外部数据集,如Infocom06,只包含节点相遇情况,没包含节点位置信息。最近了解到The ONE(The Opportunistic Network Environment simulator)仿真器可以处理这些数据。本文介绍将数据集转换成符合The ONE格式以及将其导入The ONE。
1. The ONE标准事件格式
将数据集转换成The ONE标准事件的格式,以CRAWDAD上的Infocom05为例,Infocom05数据集每行表示一对节点相遇情况(节点i,节点j,时间开始,时间结束,…, …),举例如下:
1 40 21574 21687 1 0
1 29 21578 21687 1 0
1 30 21687 21687 1 0
将每一行转换成如下格式,以上述第一行为例,如下(时间 CONN 节点i 节点j 连接建立/没有连接):
21574 CONN 1 40 up21687 CONN 1 40 down
完成上面的转换,只需写一个简单awk脚本即可,源代码如下:
BEGIN {
CONN = "CONN"
UP = "up"
DOWN = "down"
}
{
node_i = $1
node_j = $2
time_start = $3
time_end = $4
print time_start, CONN, node_i, node_j, UP
print time_end, CONN, node_i, node_j, DOWN
}
值得注意的是,上述的awk脚本需要进一步完善,如调整开始时间从0或1开始(我的是从1开始),节点从0开始。除此之外,上述的产生的数据集还不能直接使用,需要对其排序sort -k1,1n -k3,4n -k5,5dr
。
2. 导入The ONE
将上述新得到的数据集文件导入The ONE仿真器,体现在配置文件,即将移动模型设成静态StationaryMovement
,事件类型设成外部事件队列。相关配置如下:
Scenario.simulateConnections = false
Group.movementModel = StationaryMovement
Group.nodeLocation = 0,1
Events.nrof = 2
Events1.class = ExternalEventsQueue
Events1.filePath = nc/traces/infocom05.txt
其他配置可参考The ONE javadoc的常量值/one_1.5.1-RC2/doc/constant-values.html
。
参考资料: